home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / numericargument.fpl < prev    next >
Text File  |  1995-07-21  |  2KB  |  62 lines

  1. // $Id: NumericArgument.FPL 1.4 1995/07/21 10:37:47 jskov Exp $
  2. // $VER: NumericArgument.FPL 1.0 (25.02.95) © Jesper Skov $
  3.  
  4.  
  5. // Figure repeat/arg by checking for "__NumArg" substring in execution string!
  6.  
  7. int export __NumArg=0;
  8.  
  9. void export NumericArgument()
  10. {
  11.   int execute=1;
  12.   int cont=1;
  13.   int arg=4;
  14.   int cuEnds = 0; // ID if C-u should end input (only if 0-9 has been used)
  15.   string exeString, key, numString;
  16.  
  17.   while (cont){
  18.     Status(0,joinstr("Repeat/Arg: (", itoa(arg), ") »", numString, "«"));
  19.     exeString=KeyPress();
  20.     if(!strncmp("Output(\"", exeString, 8)){// Check control keys!
  21.       key=substr(exeString,8,1);
  22.       if (!strcmp(key,"\x07")){                // C-g -> Cancel
  23.         cont=0;
  24.         execute=0;
  25.       } else if ((0<=strcmp(key, "0"))&&(0>=strcmp(key, "9"))){
  26.         if (!cuEnds){                        // If first num entry, kill arg value!
  27.           arg=0;
  28.           cuEnds=1;
  29.         }
  30.         numString+=key;
  31.         arg = arg*10+atoi(key);
  32.       } else {                                // Start (repeated) call
  33.         cont =0;
  34.       }
  35.     } else if (!strcmp(exeString,"NumericArgument();")){// C-u -> End numeric input/Multiply by 4
  36.       if (cuEnds){
  37.         cont=0;
  38.         Status(0,joinstr("Repeat/Arg: (", itoa(arg), ")"));
  39.         exeString = KeyPress();            // Get function to call/rep
  40.       } else {
  41.         arg=arg*4;
  42.       }
  43.     } else {                                // Function to call!
  44.       cont=0;
  45.     }
  46.   }
  47.   if (execute){                                // Did user chicken out?
  48.     if (-1==strstr(exeString, "__NumArg")){    // Argument call OR repeat?
  49.       while (arg){                            // REPEAT function (arg) times
  50.         ExecuteString(exeString);
  51.         arg--;
  52.       }
  53.     } else {                                // ARGUMENT
  54.       __NumArg=arg;
  55.       ExecuteString(exeString);
  56.       __NumArg=0;
  57.     }
  58.   }
  59. }
  60.  
  61. AssignKey("NumericArgument();", "control u");
  62.